/**
* HiloDeCliente
* 
* Se encarga de la atencion de cada uno de los clientes
* que se conecten al servidor. Cada uno de los clientes
* corre en un hilo separado.
*/

import java.io.*;
import java.net.Socket;
//import java.util.*;
//import java.net.ServerSocket;

public class HiloDeClienteEscritura  implements Runnable{
    
   Socket socketCliente;
   String loginUsuario;
   
   /*
    * Metodo constructor de la clase
    */
   public HiloDeClienteEscritura(String loginUsuario, Socket client){
        this.socketCliente = client;
        this.loginUsuario = loginUsuario;
   }

    public void run(){
         try {
        	 System.out.println("HDC: Tam del hash tablaIdColaMensajes HDCE: "+HiloDeCliente.tablaIdColaMensajes.size() + ":" + HiloDeCliente.tablaIdColaMensajes);
        	 PrintWriter mensajeParaCliente = new PrintWriter
				 				 (new BufferedWriter
				 				 (new OutputStreamWriter(socketCliente.getOutputStream())),true);
        	 while(Server.tablaConectados.get(loginUsuario) == 1){
        		 Thread.sleep(2000);
        		 if(!HiloDeCliente.tablaIdColaMensajes.get(loginUsuario).isEmpty()){
					 String mensajeConcat = "";
//					 String tamanoCola = String.valueOf(HiloDeCliente.tablaIdColaMensajes.get(loginUsuario).size());
					 while (HiloDeCliente.tablaIdColaMensajes.get(loginUsuario).size() > 0 ){
						 System.out.println("HDCE: 1 Cola de "+ loginUsuario + " -> " 
								 + HiloDeCliente.tablaIdColaMensajes.get(loginUsuario));
						 mensajeConcat = mensajeConcat + "|" + HiloDeCliente.tablaIdColaMensajes.get(loginUsuario).remove();
//						 System.out.println("HDCE: 2 Cola de "+ loginUsuario + " despues del remove -> " 
//								 + HiloDeCliente.tablaIdColaMensajes.get(loginUsuario));
//						 System.out.println("HDCE: 3 mensajeConcat de "+ loginUsuario + " luego de micola.remove() -> " + mensajeConcat + " tam: "+HiloDeCliente.tablaIdColaMensajes.get(loginUsuario).size());
//						 System.out.println(">>>>>>>>>>>>>>>>>>> 4 Entre :" + ++i + "veces");
					 };
//					 mensajeConcat = loginUsuario + "|" + tamanoCola + mensajeConcat;
					 mensajeConcat = loginUsuario + mensajeConcat;
	    			 mensajeParaCliente.println(mensajeConcat);
	    			 mensajeParaCliente.flush();
	    			 System.out.println("HDCE: Se mando el mensaje " + mensajeConcat + " a " + loginUsuario
	    					 + "\nEstado de la cola despues del envio: "+ loginUsuario + " -> " + HiloDeCliente.tablaIdColaMensajes.get(loginUsuario));
	        	 }
        	 }
        	 System.out.println("_____HDCE: Fin de la conexion de escritura con " + loginUsuario + "_____");
        	 mensajeParaCliente.close();
         }catch(Exception e){
            System.out.println("HDCE: Error HiloDeClienteEscritura");
            e.printStackTrace();            
         }
    }
}
